package canchaFulbito.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import canchaFulbito.excepcion.DAOExcepcion;
import canchaFulbito.modelo.Alquiler;
import canchaFulbito.modelo.Cancha;
import canchaFulbito.modelo.Distrito;
import canchaFulbito.modelo.Horario;
import canchaFulbito.modelo.Local;
import canchaFulbito.modelo.Servicio;
import canchaFulbito.util.ConexionBD;

public class ListadosDAO extends BaseDAO{
	
	public Collection<Distrito> ListarDistrito() throws DAOExcepcion {
		System.out.println("ListadoDAO: ListarDistrito(int Distrito)");
		
		String query = "SELECT CODDIST IdDistrito,NOMBRE NomDistrito FROM DISTRITO WHERE CODDPTO=15 and codprov=1";
		
		Collection<Distrito> lista = new ArrayList<Distrito>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			rs = stmt.executeQuery();
			
			while (rs.next()) {
				Distrito di = new Distrito();				
				di.setIdDistrito(rs.getInt("IdDistrito"));
				di.setNomDistrito(rs.getString("NomDistrito"));
				lista.add(di);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	return lista;
   }
	/*
	public Collection<Cancha> ListarCanchas_ant(String Dia, String Hora1, String Hora2, String codDist) throws DAOExcepcion {
		//System.out.println("ListadoDAO: ListarCanchas(int Distrito)");
		
		String query = "SELECT l.numTelefono,l.nomdireccion,l.UrlGoogleMaps,h.idHorario,c.idCancha,h.Estado,h.FechaAtencion,h.Hora,c.NomCancha,c.Caracteristicas,c.Foto,l.NomLocal,d.Nombre,a.idAlquiler," +
				       "case A.estado when 'A' then  'NO DISPONIBLE'  ELSE 'DISPONIBLE' END Disponibilidad " + 
                       "FROM cancha c,local l,distrito d,horario h LEFT join alquiler a on a.Horario_idHorario = h.idHorario " + 
                       "Where l.idLocal=c.Local_idLocal And h.cancha_idcancha = c.idCancha And d.coddist = l.Ciudad_idCiudad and d.coddpto = 15 and d.codprov = 1 and " + 
                       "fechaatencion = ?  and  cast(replace(substr(hora,1,2),':','') AS UNSIGNED) >= ? And cast(replace(substr(hora,1,2),':','') AS UNSIGNED) <= ? and d.coddist = ?";
		
		Collection<Cancha> lista = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, Dia);
			stmt.setString(2, Hora1);
			stmt.setString(3, Hora2);
			stmt.setString(4, codDist);
			
			rs = stmt.executeQuery();
			
			while (rs.next()) {
				System.out.print("entro aqui 1");
				Cancha ca = new Cancha();
				Horario ho = new Horario();
				Local lo = new Local();
				Distrito di = new Distrito();
				Alquiler al = new Alquiler();
				//h.Estado,h.FechaAtencion,h.Hora
				ho.setIdHorario(rs.getInt("h.idHorario"));
				ho.setEstado(rs.getString("h.Estado"));
				ho.setFecAtencion(rs.getString("h.FechaAtencion"));
				ho.setHora(rs.getString("h.Hora"));
				ca.setoHorario(ho);
				//c.idCancha,c.NomCancha,c.Caracteristicas,c.Foto
				ca.setIdCancha(rs.getInt("c.idCancha"));
				ca.setNomCancha(rs.getString("c.NomCancha"));
				ca.setCaracteristicas(rs.getString("c.Caracteristicas"));
				ca.setFoto(rs.getString("c.Foto"));
				ca.setDisponiblidad(rs.getString("Disponibilidad"));
				//l.NomLocal,
				lo.setNumTelefono(rs.getString("l.numTelefono"));
				lo.setNomDireccion(rs.getString("l.nomdireccion"));
				lo.setUrlGoogleMaps(rs.getString("l.UrlGoogleMaps"));
				lo.setNomLocal(rs.getString("l.NomLocal"));
				ca.setoLocal(lo);
				//d.Nombre,
				di.setNomDistrito(rs.getString("d.Nombre"));
				ca.setoDistrito(di);
				//a.idAlquiler
				al.setIdAlquiler(rs.getInt("a.idAlquiler"));
				lista.add(ca);
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	return lista;
   }
	
	
	public Collection<Cancha> ListarCanchasDispon(Date fecha, int horainicio, int horafin,int Distrito) throws DAOExcepcion {
		
		String query = "Select * From  cancha c left join horario a  on c.idCancha = a.Cancha_idCancha WHERE IDCANCHA = '1'";
		
		Collection<Cancha> lista = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			
			rs = stmt.executeQuery();
			
			
			
			while (rs.next()) {
				
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	return lista;
   }
	
	*/
	
	public Collection<Local>  ListarLocal(int idPersona) throws DAOExcepcion{
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Collection<Local> lista = new ArrayList<Local>();
		Distrito distrito = new Distrito();
		
		try {
			String query = "Select idLocal,NomLocal,NomDireccion,UrlGoogleMaps,NumTelefono,Distrito.Nombre NomDist,idDistrito From Local,Distrito where Distrito_idDistrito=idDistrito and Persona_idPersona=?" ;
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idPersona);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Local local = new Local();
				local.setIdLocal(rs.getInt("idLocal"));
				local.setNomLocal(rs.getString("NomLocal"));
				local.setNomDireccion(rs.getString("nomdireccion"));
				
				if (rs.getString("UrlGoogleMaps")!=null||rs.getString("UrlGoogleMaps")==""){
					local.setUrlGoogleMaps(rs.getString("UrlGoogleMaps"));
				}else{
						local.setUrlGoogleMaps("No Tiene UrlGoogleMaps");
					}
				local.setNumTelefono(rs.getString("numTelefono"));
				
				distrito.setNomDistrito(rs.getString("NomDist"));
				local.setoDistrito(distrito);
				lista.add(local);
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	//ListarServicios
	public Collection<Servicio>  ListarServicios() throws DAOExcepcion{
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Collection<Servicio> lista = new ArrayList<Servicio>();
		
		try {
			String query = "Select * From Servicio" ;
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Servicio servicio = new Servicio();
				servicio.setIdServicio(rs.getInt("idServicio"));
				servicio.setNomServicio(rs.getString("NomServicio"));
				servicio.setDescripcion(rs.getString("Descripcion"));
				servicio.setCosto(rs.getDouble("Costo"));
				lista.add(servicio);
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	
	public Collection<Local>  ListarLocalCombo(int idPersona) throws DAOExcepcion{
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Collection<Local> lista = new ArrayList<Local>();
		
		try {
			String query = "Select idLocal,NomLocal From Local,Distrito where Distrito_idDistrito=idDistrito and Persona_idPersona=?" ;
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idPersona);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Local local = new Local();
				local.setIdLocal(rs.getInt("idLocal"));
				local.setNomLocal(rs.getString("NomLocal"));
				lista.add(local);
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
	/*
	//ListarServicios
		public Collection<Cancha>  ListadoDistritoCanchas(int idPersona) throws DAOExcepcion{
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			Collection<Cancha> lista = new ArrayList<Cancha>();
			Distrito distrito = new Distrito();
			
			try {
				String query = "select distinct idDistrito,distrito.nombre distrito from cancha,local,distrito where idLocal=Local_idLocal and Distrito_idDistrito = idDistrito and Persona_idPersona = ?" ;
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1, idPersona);
				rs = stmt.executeQuery();
				while (rs.next()) {
					Cancha cancha = new Cancha();
					System.out.print("Distrito-->" + rs.getString("distrito"));
					distrito.setIdDistrito(rs.getInt("idDistrito"));
					distrito.setNomDistrito(rs.getString("distrito"));
					cancha.setoDistrito(distrito);
					lista.add(cancha);
				}
				
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return lista;
		}*/
}
